Passed
Pull Request — develop (#758)
by Kevin Van
04:28
created

PlayerDetail   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 9
eloc 74
dl 0
loc 92
rs 10
c 0
b 0
f 0

9 Functions

Rating   Name   Duplication   Size   Complexity  
A renderPlayerHeader 0 9 1
A renderPlayerName 0 5 1
A render 0 13 1
A renderPlayerBody 0 10 1
A renderPlayerBirthdate 0 5 1
A renderPlayerJoinDate 0 5 1
A renderPlayerImage 0 15 1
A renderPlayerData 0 6 1
A renderPlayerPosition 0 9 1
1
import { Link } from "gatsby"
2
import { getSrc } from "gatsby-plugin-image"
3
import React, { Component } from "react"
4
5
import "./player.scss"
6
7
// eslint-disable-next-line
8
String.prototype.replaceAll = function (search, replacement) {
9
  // eslint-disable-next-line @typescript-eslint/no-this-alias
10
  var target = this
11
  return target.replace(new RegExp(search, `g`), replacement)
12
}
13
14
/**
15
 */
16
class PlayerDetail extends Component {
17
  renderPlayerName = (player) => (
18
    <h1 className={`player-detail__name`}>
19
      <span className={`player-detail__name-first`}>{player.field_firstname}</span>
20
      <span className={`player-detail__name-last`}>{player.field_lastname}</span>
21
    </h1>
22
  )
23
  renderPlayerImage = (player) => {
24
    return (
25
      <div className={`bg-green-mask`}>
26
        <div
27
          className={`player-detail__bg-avatar`}
28
          style={
29
            player.relationships.field_image && {
30
              backgroundImage: `url(${getSrc(
31
                player.relationships.field_image.localFile.childImageSharp.gatsbyImageData
32
              )})`,
33
            }
34
          }
35
        />
36
        <div className={`bg-white-end`} />
37
      </div>
38
    )
39
  }
40
  renderPlayerHeader = (player) => (
41
    <header className={`player-detail__header`}>
42
      {this.renderPlayerName(player)}
43
      {this.renderPlayerImage(player)}
44
45
      <div className={`player-detail__bg-shirt-number`} aria-hidden="true">
46
        {player.field_position_short || ``}
47
      </div>
48
    </header>
49
  )
50
  renderPlayerBirthdate = (player) => (
51
    <div className={`player-detail__data-item player-detail__data-item--birthdate`}>
52
      <span className={`player-detail__data-item__label`}>Geboortedatum</span>
53
      <span className={`player-detail__data-item__data`}>{player.field_birth_date || `Onbekend`}</span>
54
    </div>
55
  )
56
57
  renderPlayerPosition = (player) => (
58
    <div className={`player-detail__data-item player-detail__data-item--position`}>
59
      <span className={`player-detail__date-item__data`}>{player.field_position_staff || ``}</span>
60
      <span className={`player-detail__data-item__label`}>
61
        {player.relationships.node__team && (
62
          <Link to={player.relationships.node__team[0].path.alias}>{player.relationships.node__team[0].title}</Link>
63
        )}
64
      </span>
65
    </div>
66
  )
67
  renderPlayerJoinDate = (player) => (
68
    <div className={`player-detail__data-item player-detail__data-item--joindate`}>
69
      <span className={`player-detail__data-item__label`}>Aangesloten bij KCVV sinds</span>
70
      <span className={`player-detail__data-item__data`}>{player.field_join_date || `Onbekend`}</span>
71
    </div>
72
  )
73
  renderPlayerData = (player) => (
74
    <section className={`player-detail__data`}>
75
      {this.renderPlayerBirthdate(player)}
76
      {this.renderPlayerPosition(player)}
77
      {this.renderPlayerJoinDate(player)}
78
    </section>
79
  )
80
  renderPlayerBody = (player) => {
81
    const cleanBody =
82
      (player.body &&
83
        player.body.processed.replaceAll(`/sites/default/`, `${process.env.GATSBY_API_DOMAIN}/sites/default/`)) ||
84
      ``
85
86
    return (
87
      <section className={`player-detail__body`}>
88
        <div dangerouslySetInnerHTML={{ __html: cleanBody }} />
89
      </section>
90
    )
91
  }
92
  render() {
93
    const { player } = this.props
94
95
    return (
96
      <article className={`player-detail`}>
97
        {this.renderPlayerHeader(player)}
98
99
        <div className={`staff-break`}></div>
100
101
        {this.renderPlayerData(player)}
102
103
        {this.renderPlayerBody(player)}
104
      </article>
105
    )
106
  }
107
}
108
109
export default PlayerDetail
110